TCP Echo (with MAC OS ; C)

server
#include<stdio.h>
#include<stdlib.h>
#include<arpa/inet.h>
#include<sys/socket.h>
#include<unistd.h>
#include<string.h>
int main(int argc, char* argv[])
{
int serv_sock;
int clint_sock;
struct sockaddr_in serv_addr;
struct sockaddr_in clint_addr;
socklen_t clnt_addr_size;
if(argc != 2)
{
printf("%s <port>\n", argv[0]);
exit(1);
}
serv_sock = socket(PF_INET, SOCK_STREAM,0); //1
if(serv_sock == -1)
printf("socket error\n");
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(atoi(argv[1]));
if(bind(serv_sock,(struct sockaddr*)&serv_addr, sizeof(serv_addr)) == -1) //2
printf("bind error\n");
if(listen(serv_sock,5)==-1) //3
printf("listen error\n");
clnt_addr_size = sizeof(clint_addr);
clint_sock = accept(serv_sock,(struct sockaddr*)&clint_addr,&clnt_addr_size); //4
if(clint_sock == -1)
printf("accept error\n");
char message[] = "hello client";
write(clint_sock, message, sizeof(message)); //5
close(serv_sock); //6
close(clint_sock);
return 0;
}
client
#include<stdio.h>
#include<stdlib.h>
#include<arpa/inet.h>
#include<sys/socket.h>
#include<unistd.h>
#include<string.h>
int main(int argc, char* argv[])
{
int my_sock;
struct sockaddr_in serv_addr;
int str_len;
if(argc != 3)
{
printf("%s <IP> <PORT>\n", argv[0]);
exit(1);
}
my_sock = socket(PF_INET,SOCK_STREAM,0); //1
if(my_sock == -1)
printf("socket error\n");
memset(&serv_addr,0,sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr=inet_addr(argv[1]);
serv_addr.sin_port=htons(atoi(argv[2]));
if(connect(my_sock,(struct sockaddr*)&serv_addr,sizeof(serv_addr))==-1) //2
printf("connect error\n");
char message[15];
str_len = read(my_sock,message,sizeof(message)-1); //3
if(str_len==-1)
printf("read error\n");
printf(" : %s \n", message);
close(my_sock); //4
return 0;
}
server&client 통합 IPC(InterProcess Communication에 사용)
#incldue <stdio.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <string.h>
#include <unistd.h>
#incldue <stdlib.h>
#define MAXLINE 1024
int main(int argc, char **argv){
strcut sockaddr_in serveraddr;
int server_sockfd;
int client_len;
char buf[MAXLINE];
if((server_sockfd=socket(AF_INET, SOCK_STREAM, 0))==-1){
perror("error: ");
return 1;
}
serveraddr.sin_family=AF_INET;
serveraddr.sin_addr.s_addr=inet_addr("127.0.0.1");
serveraddr.sin_port=htons(4000);
client_len=sizeof(serveraddr);
if(connect(server_sockfd, (struct sockaddr*)&serveraddr, client_len)==-1){
perror("connect error: ");
return 1;
}
memset(buf, 0x00, MAXLINE);
read(0, buf, MAXLINE);
if(write(server_sockfd, buf, MAXLINE)<=0){
perror("write error:");
return 1;
}
memset(buf, 0x00, MAXLINE);
if(read(server_sockfd, buf, MAXLINE)<=0){
perror("read error: ");
return 1;
}
close(server_sockfd);
printf("server: %s\n", buf);
return 0;
}